Julia 参数构造函数
阐述
对于含参数的复合类型,默认情况下它具备
与通常情况相同,如果提供新的内构造方法,则原有构造方法被覆盖。自定义的构造方法有两种选择:
- 指定类型的内构造方法,此时与默认的语义类似
- 不指定类型的内构造方法,但是用
new{T}()
语法来在创建实例时指定类型
实例
默认情况
若不显示提供构造函数,则默认生成的构造函数类似于以下定义:
julia> struct Point{T<:Real}
x::T
y::T
Point{T}(x,y) where {T<:Real} = new(x,y)
end
julia> Point(x::T, y::T) where {T<:Real} = Point{T}(x,y);
在这个定义下,调用指定类型的内构造函数(只要实参能合法转换为 T
)是合法的,调用不指定类型的外构造函数(必须用两个同类型的实参)也是合法的。
不指定类型的内构造方法
struct SummedArray{T<:Number,S<:Number}
data::Vector{T}
sum::S
function SummedArray(a::Vector{T}) where T
S = widen(T)
new{T,S}(a, sum(S, a))
end
end
它可以用于保证多个类型之间具有一定的联系。